前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
  • JavaScript Part 1

    • Ajax总结篇
    • Canvas 绘制八大行星
    • DOM编程之API学习总结篇
    • JavaScript事件机制
    • JavaScript代码片段100个
    • JavaScript作用域分析总结
    • JavaScript原型链回顾
    • JavaScript及jQuery中的各种宽高属性图解
    • JavaScript工程项目的一系列最佳实践
    • JavaScript常用API合集
    • JavaScript数组、字符串、对象常用方法
    • JavaScript数组方法总结篇
    • JavaScript深浅拷贝
    • JavaScript运动框架之速度时间版本
    • JavaScript运行机制Event Loop
    • JavaScript防抖节流原理
    • Javascript中的复制粘贴功能
    • Javascript数组详解
    • OOP之原型与原型链
    • Object.defineProperty详解
    • V8源码浅析JS数组常见方法
    • await 在 forEach 中不生效解决方案
    • iframe+表单跨域提交POST请求
    • javascript笔记总结篇
    • 业务中处理数据结构常用的JS方法
    • 作用域
    • 你真的掌握变量和类型了吗
    • 前后端分离之数据Mock
    • 原型与原型链
    • 原生JS补给(上)
    • 如何写出一个惊艳面试官的深拷贝
    • 带你填一些JS容易出错的坑
    • 彻底弄懂 JavaScript 执行机制
    • 执行上下文 执行栈
    • 正则回顾总结
    • 正则基础知识
    • 正则完整篇
    • 正则表达式
    • 浅析Promise原理
    • 浅谈JavaScript中的异步处理
    • 深拷贝 vs 浅拷贝
    • 聊一聊typeof instanceof 实现原理.
    • 聊一聊闭包
    • 高阶函数map reduce filter
  • JavaScript Part 2

  • CSS

  • HTML

  • Jquery

  • ES6

  • 小程序

  • Vue

  • React

  • 深入React

  • React Native

  • NodeJS

  • Angular

  • TypeScript

  • Webpack

  • 浏览器

  • 移动端

  • 前端工程化

  • Electron

  • HTTP

  • Nginx

  • Linux

  • 数据结构与算法

  • LeetCode算法题

  • 综合

在线演示地址 http://codepen.io/poetries/pen/KNZLJZ

<canvas width="1000" height="1000" id="canvas" style="background:#000;">
	您的浏览器不支持,请升级浏览器!
</canvas>
@前端进阶之旅: 代码已经复制到剪贴板
//设置2d绘图环境
var ctx = document.getElementById("canvas").getContext("2d");

//轨道
function drawTrack(){
  for(var i = 0;i < 8;i++){
    ctx.beginPath();
    ctx.arc(500,500,(i+1) * 50,0,360,false);
    ctx.strokeStyle = "#fff";//设置笔触颜色
    ctx.stroke();
    ctx.closePath();
  }
}


//星球

function Star(x,y,radius,cycle,sColor,eColor){
  //画出星球需要的属性
  //星球的坐标点 星球的半径 星球的颜色(开始颜色、结束颜色)
  //公转周期
  
  //星球坐标点
  this.x = x;
  this.y = y;
  this.radius = radius;
  this.cycle = cycle;
  this.eColor = eColor;
  this.sColor = sColor;
  
  
  this.color = null;//渐变颜色空对象
  this.time = 0;//设置一个计时器
  
  this.draw = function(){
    //save()可以这样理解 原来的画布内容不变 把save()和restore()之间的内容画好了 在塞进来
    ctx.save();//保存之前的画布内容
    ctx.translate(500,500);//重置0,0坐标点
    ctx.rotate(this.time * (360/this.cycle) * Math.PI / 180);//设置旋转角度
    
    //画星球
    ctx.beginPath();
    ctx.arc(this.x,this.y,this.radius,0,360,false);
    ctx.closePath();
    
    //设置星球的填充颜色
    
    this.color = ctx.createRadialGradient(this.x,this.y,0,this.x,this.y,this.radius);
    this.color.addColorStop(0,this.sColor);//渐变颜色开始点
    this.color.addColorStop(0,this.eColor);//渐变颜色结束点
    ctx.fillStyle = this.color;
    ctx.fill();//执行填充命令
    
    //填充星球
    
    
    ctx.restore();//恢复之前保存的画布内容
    this.time +=1;
  }
}

 //创建一个太阳对象的构造函数
function Sun(){
  Star.call(this,0,0,20,0,"#F00","#f90");
}
//创建一个水星的对象构造方法
function Mercury(){
  Star.call(this,0,-50,10,87.70,"#A69697","#5C3E40");
}
//创建一个金星的对象构造方法
function Venus(){
  Star.call(this,0,-100,10,224.701,"#C4BBAC","#1F1315");
}
//创建一个地球的对象构造方法
function Earth(){
  Star.call(this,0,-150,10,365.224,"#78B1E8","#050C12");
}
//创建一个火星的对象构造方法
function Mars(){
  Star.call(this,0,-200,10,686.98,"#CEC9B6","#76422D");
}
//创建一个木星的对象构造方法
function Jupiter(){
  Star.call(this,0,-250,10,4332.589,"#C0A48E","#322222");
}
//创建一个土星的对象构造方法
function Saturn(){
  Star.call(this,0,-300,10,10759.5,"#F7F9E3","#5C4533");
}
 //创建一个天王星的对象构造方法
function Uranus(){
  Star.call(this,0,-350,10,30799.095,"#A7E1E5","#19243A");
}
//创建一个海王星的对象构造方法
function Neptune(){
  Star.call(this,0,-400,10,60152,"#0661B2","#1E3B73");
}

 //创建太阳对象实例
var sun=new Sun();

//创建水星对象实例
var water=new Mercury();

//创建金星对象实例
var gold=new Venus();

//创建一个地球对象实例
var diqiu=new Earth();

//创建一个火星对象实例
var fire=new Mars();

//创建一个木星对象实例
var wood=new Jupiter();

//创建一个土星对象实例
var soil=new Saturn();

//创建一个天王星对象实例
var god=new Uranus();

//创建一个海王星对象实例
var sea=new Neptune();


 function move(){
   //清除画布
   ctx.clearRect(0,0,1000,1000);
   //画出轨道
   drawTrack();
   //画出每个星球
   sun.draw();
   water.draw();
   gold.draw();
   diqiu.draw();
   fire.draw();
   wood.draw();
   soil.draw();
   god.draw();
   sea.draw();
 }

//使让星球进行运动
setInterval(move,10);
@前端进阶之旅: 代码已经复制到剪贴板
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
  • JavaScript Part 1

    • Ajax总结篇
    • Canvas 绘制八大行星
    • DOM编程之API学习总结篇
    • JavaScript事件机制
    • JavaScript代码片段100个
    • JavaScript作用域分析总结
    • JavaScript原型链回顾
    • JavaScript及jQuery中的各种宽高属性图解
    • JavaScript工程项目的一系列最佳实践
    • JavaScript常用API合集
    • JavaScript数组、字符串、对象常用方法
    • JavaScript数组方法总结篇
    • JavaScript深浅拷贝
    • JavaScript运动框架之速度时间版本
    • JavaScript运行机制Event Loop
    • JavaScript防抖节流原理
    • Javascript中的复制粘贴功能
    • Javascript数组详解
    • OOP之原型与原型链
    • Object.defineProperty详解
    • V8源码浅析JS数组常见方法
    • await 在 forEach 中不生效解决方案
    • iframe+表单跨域提交POST请求
    • javascript笔记总结篇
    • 业务中处理数据结构常用的JS方法
    • 作用域
    • 你真的掌握变量和类型了吗
    • 前后端分离之数据Mock
    • 原型与原型链
    • 原生JS补给(上)
    • 如何写出一个惊艳面试官的深拷贝
    • 带你填一些JS容易出错的坑
    • 彻底弄懂 JavaScript 执行机制
    • 执行上下文 执行栈
    • 正则回顾总结
    • 正则基础知识
    • 正则完整篇
    • 正则表达式
    • 浅析Promise原理
    • 浅谈JavaScript中的异步处理
    • 深拷贝 vs 浅拷贝
    • 聊一聊typeof instanceof 实现原理.
    • 聊一聊闭包
    • 高阶函数map reduce filter
  • JavaScript Part 2

  • CSS

  • HTML

  • Jquery

  • ES6

  • 小程序

  • Vue

  • React

  • 深入React

  • React Native

  • NodeJS

  • Angular

  • TypeScript

  • Webpack

  • 浏览器

  • 移动端

  • 前端工程化

  • Electron

  • HTTP

  • Nginx

  • Linux

  • 数据结构与算法

  • LeetCode算法题

  • 综合

完整面试题地址:
作者:程序员poetry
扫码关注作者公众号:「前端进阶之旅」 每天分享技术干货
前端进阶之旅公众号二维码

Canvas 绘制八大行星|博客系列

在线演示地址 http://codepen.io/poetries/pen/KNZLJZ

<canvas width="1000" height="1000" id="canvas" style="background:#000;">
	您的浏览器不支持,请升级浏览器!
</canvas>
@前端进阶之旅: 代码已经复制到剪贴板
//设置2d绘图环境
var ctx = document.getElementById("canvas").getContext("2d");

//轨道
function drawTrack(){
  for(var i = 0;i < 8;i++){
    ctx.beginPath();
    ctx.arc(500,500,(i+1) * 50,0,360,false);
    ctx.strokeStyle = "#fff";//设置笔触颜色
    ctx.stroke();
    ctx.closePath();
  }
}


//星球

function Star(x,y,radius,cycle,sColor,eColor){
  //画出星球需要的属性
  //星球的坐标点 星球的半径 星球的颜色(开始颜色、结束颜色)
  //公转周期
  
  //星球坐标点
  this.x = x;
  this.y = y;
  this.radius = radius;
  this.cycle = cycle;
  this.eColor = eColor;
  this.sColor = sColor;
  
  
  this.color = null;//渐变颜色空对象
  this.time = 0;//设置一个计时器
  
  this.draw = function(){
    //save()可以这样理解 原来的画布内容不变 把save()和restore()之间的内容画好了 在塞进来
    ctx.save();//保存之前的画布内容
    ctx.translate(500,500);//重置0,0坐标点
    ctx.rotate(this.time * (360/this.cycle) * Math.PI / 180);//设置旋转角度
    
    //画星球
    ctx.beginPath();
    ctx.arc(this.x,this.y,this.radius,0,360,false);
    ctx.closePath();
    
    //设置星球的填充颜色
    
    this.color = ctx.createRadialGradient(this.x,this.y,0,this.x,this.y,this.radius);
    this.color.addColorStop(0,this.sColor);//渐变颜色开始点
    this.color.addColorStop(0,this.eColor);//渐变颜色结束点
    ctx.fillStyle = this.color;
    ctx.fill();//执行填充命令
    
    //填充星球
    
    
    ctx.restore();//恢复之前保存的画布内容
    this.time +=1;
  }
}

 //创建一个太阳对象的构造函数
function Sun(){
  Star.call(this,0,0,20,0,"#F00","#f90");
}
//创建一个水星的对象构造方法
function Mercury(){
  Star.call(this,0,-50,10,87.70,"#A69697","#5C3E40");
}
//创建一个金星的对象构造方法
function Venus(){
  Star.call(this,0,-100,10,224.701,"#C4BBAC","#1F1315");
}
//创建一个地球的对象构造方法
function Earth(){
  Star.call(this,0,-150,10,365.224,"#78B1E8","#050C12");
}
//创建一个火星的对象构造方法
function Mars(){
  Star.call(this,0,-200,10,686.98,"#CEC9B6","#76422D");
}
//创建一个木星的对象构造方法
function Jupiter(){
  Star.call(this,0,-250,10,4332.589,"#C0A48E","#322222");
}
//创建一个土星的对象构造方法
function Saturn(){
  Star.call(this,0,-300,10,10759.5,"#F7F9E3","#5C4533");
}
 //创建一个天王星的对象构造方法
function Uranus(){
  Star.call(this,0,-350,10,30799.095,"#A7E1E5","#19243A");
}
//创建一个海王星的对象构造方法
function Neptune(){
  Star.call(this,0,-400,10,60152,"#0661B2","#1E3B73");
}

 //创建太阳对象实例
var sun=new Sun();

//创建水星对象实例
var water=new Mercury();

//创建金星对象实例
var gold=new Venus();

//创建一个地球对象实例
var diqiu=new Earth();

//创建一个火星对象实例
var fire=new Mars();

//创建一个木星对象实例
var wood=new Jupiter();

//创建一个土星对象实例
var soil=new Saturn();

//创建一个天王星对象实例
var god=new Uranus();

//创建一个海王星对象实例
var sea=new Neptune();


 function move(){
   //清除画布
   ctx.clearRect(0,0,1000,1000);
   //画出轨道
   drawTrack();
   //画出每个星球
   sun.draw();
   water.draw();
   gold.draw();
   diqiu.draw();
   fire.draw();
   wood.draw();
   soil.draw();
   god.draw();
   sea.draw();
 }

//使让星球进行运动
setInterval(move,10);
@前端进阶之旅: 代码已经复制到剪贴板

← Ajax总结篇DOM编程之API学习总结篇 →

fe